home *** CD-ROM | disk | FTP | other *** search
- /* SimpMsgr.c
- **
- ** Copyright 1995, mFactory, Inc.
- ** All rights reserved.
- */
-
- #include "SimpMsgr.h"
-
- #define kActivatePopup 6 // DITL indices
- #define kSendPopup 9
-
-
- /* Initial entry point
- */
-
- MCompMainFuncDcl MCompMainName(MInitInfo *initInfo)
- {
- MDefineComponent(SimpMsgrComp, kMCanDragOff);
- MInheritClass(MComponent, kMCompNumProcs, kMBaseCompSlot);
-
- // MComponent methods we must override
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompConstructor, MCompConstructor);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompCopy, MCompCopy);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompCopyConstructor, MCompCopyConstructor);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompDestructor, MCompDestructor);
-
- // MComponent methods we choose to override
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompEditorOpen, MCompEditorOpen);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompEditorAccept, MCompEditorAccept);
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompGetSaveInfo, MCompGetSaveInfo);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompSaveComponent, MCompSaveComponent);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompRestoreComponent, MCompRestoreComponent);
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompEnabled, MCompEnabled);
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompDisabled, MCompDisabled);
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompProcessMessage, MCompProcessMessage);
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompGetAttribute, MCompGetAttribute);
-
- MDefineMethod(kSimpMsgrSlot, kMBaseCompSlot, kMCompAdaptIDs, MCompAdaptIDs);
-
- MConnectCommonServices(initInfo);
-
- MEndComponentDef;
- }
-
-
- /* Initialize component
- */
-
- static MErr MCompConstructor(SimpMsgrComp *self, MObjectRef *mRef)
- {
- MInitEvent(self->f_activateEvent, kMMouseUp, 0);
- MInitEvent(self->f_sendEvent, kMNone, 0);
- return kMNoCompErr;
- }
-
-
- /* Copy component data
- */
-
- static MErr MCompCopy(SimpMsgrComp *self, SimpMsgrComp *previousSelf)
- {
- MCopyEvent(self->f_activateEvent, previousSelf->f_activateEvent);
- MCopyEvent(self->f_sendEvent, previousSelf->f_sendEvent);
- return kMNoCompErr;
- }
-
-
- /* Copy component
- */
-
- static MErr MCompCopyConstructor(SimpMsgrComp *self, SimpMsgrComp *previousSelf, MObjectRef *mRef)
- {
- MCompConstructor(self, mRef);
- return MCompCopy(self, previousSelf);
- }
-
-
- /* Dispose component
- */
-
- static MErr MCompDestructor(SimpMsgrComp *self)
- {
- MDisposeEvent(self->f_activateEvent);
- MDisposeEvent(self->f_sendEvent);
- return kMNoCompErr;
- }
-
-
- /* Open component dialog
- */
-
- static MErr MCompEditorOpen(SimpMsgrComp *self, void *editor, short editorType)
- {
- if ( editorType == kMDialogEditorType ) {
- MSetEditorItem(editor, kActivatePopup, (MDataType *) &self->f_activateEvent);
- MSetEditorItem(editor, kSendPopup, (MDataType *) &self->f_sendEvent);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Close component dialog
- */
-
- static MErr MCompEditorAccept(SimpMsgrComp *self, void *editor)
- {
- MGetEditorItem(editor, kActivatePopup, (MDataType *) &self->f_activateEvent);
- MGetEditorItem(editor, kSendPopup, (MDataType *) &self->f_sendEvent);
- return kMNoCompErr;
- }
-
-
- /* Provide save information
- */
-
- static MErr MCompGetSaveInfo(SimpMsgrComp *self, MFileIOServ *file, long saveInfo, short *rev, long *len)
- {
- long valueSize;
-
- MSizeOfValue(file, &self->f_activateEvent, &valueSize);
- *len = valueSize;
- MSizeOfValue(file, &self->f_sendEvent, &valueSize);
- *len += valueSize;
-
- *rev = kSimpMsgrRev;
- return kMNoCompErr;
- }
-
-
- /* Save component
- */
-
- static MErr MCompSaveComponent(SimpMsgrComp *self, MFileIOServ *file, long saveInfo)
- {
- MWriteValue(file, &self->f_activateEvent);
- MWriteValue(file, &self->f_sendEvent);
- return kMNoCompErr;
- }
-
-
- /* Restore component
- */
-
- static MErr MCompRestoreComponent(SimpMsgrComp *self, MFileIOServ *file, long saveInfo, short rev)
- {
- if ( rev == kSimpMsgrRev ) {
- MReadValue(file, &self->f_activateEvent);
- MReadValue(file, &self->f_sendEvent);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Component enabled (runtime)
- */
-
- static MErr MCompEnabled(SimpMsgrComp *self)
- {
- MRegisterMouseFeedback(self, &self->f_activateEvent);
- return kMNoCompErr;
- }
-
-
- /* Component disabled (runtime)
- */
-
- static MErr MCompDisabled(SimpMsgrComp *self)
- {
- MDeregisterMouseFeedback(self, &self->f_activateEvent);
- return kMNoCompErr;
- }
-
-
- /* Get component attribute
- */
-
- static MErr MCompGetAttribute(SimpMsgrComp *self, MomID attribName, MDataType *selector, MDataType *dataValue)
- {
- if ( MCmpMomID(attribName, kMEventsAttrib) && selector )
- {
- if ( selector->f_type.f_type == kMInteger )
- {
- switch (selector->f_integer.f_value & ~kMEventMask)
- {
- case kMEventExecute:
- if ( (selector->f_integer.f_value & kMEventMask) == 1 ) {
- MCopyEvent(dataValue->f_event, self->f_activateEvent);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
-
- case kMEventSend:
- if ( (selector->f_integer.f_value & kMEventMask) == 1 ) {
- MCopyEvent(dataValue->f_event, self->f_sendEvent);
- return kMNoCompErr;
- }
- else
- return kMUnableToComplyCompErr;
-
- default :
- return kMUnableToComplyCompErr;
- }
- }
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Process incoming message
- */
-
- static MErr MCompProcessMessage(SimpMsgrComp *self, MMessagePtr message)
- {
- if ( MDetectMessage(message, self->f_activateEvent) ) {
- MErr ret;
- MMessage m;
- MObjectRef *element = nil;
- MTargetType target;
-
- // get my element
- MGetElement(&element);
- if ( (ret = MError()) != kMNoCompErr )
- return ret;
-
- if ( !element )
- return kMUnableToComplyCompErr;
-
- // set up message structure and send it
- MInitObjectPtr(target.f_object, (MObjectRef)element);
- MInitSimpleMessage(self, &target, &self->f_sendEvent, &m);
- MSendMessage(&m);
- return MError();
- }
- else
- return kMUnableToComplyCompErr;
- }
-
-
- /* Adjust project-specific IDs
- */
-
- static MErr MCompAdaptIDs(SimpMsgrComp *self, MObjectPtr *sourceStore, MObjectPtr *targetStore)
- {
- MTranslateID(kMTranslateEventID, sourceStore, targetStore, (MDataType *) &self->f_activateEvent);
- return kMNoCompErr;
- }
-